import {VxeColumnPropTypes} from "vxe-table/types/column";
import {GridParams, ResponseBody} from "@/api/typing";

/********************* 公共 ***********************/

export type Props = {
  [key: string]: any
};
export type RenderType = {
  value: number | string,
  label : string
}
export type CodeProps = {
  id: string,
  code: string
}

/********************* Actions ***********************/

export enum TypeProp {
  Primary = 'primary',
  Dashed = 'dashed',
  Danger = 'danger',
  Link = 'link',
  Default = 'default'
}
export interface ActionsOptionItem {
  name?: string,
  icon?: string | Function,
  type?: TypeProp | string,
  disabled?: boolean,
  loading?: boolean,
  click?: Function,
  confirmOpera?: boolean,
  hide?: boolean,
  instruct?: string[]
}
export interface ActionsOption {
  [key: string]: ActionsOptionItem
}

/********************* Grid ***********************/

/* grid列参数 */
export interface GridColumnProp {
  // 字段名
  field: string,
  // 类型
  type: 'string' | 'number',
  // 列类型，seq = 序号、checkbox = 复选框、radio = 单选框
  columnType?: 'seq' | 'checkbox' | 'radio',
  // 宽度，px, %
  width?: number | string,
  // 列标题
  title?: string,
  // 是否开启筛选
  filter?: boolean,
  // 配置筛选条件
  filters?: any[],
  // 格式化显示内容
  formatter?: VxeColumnPropTypes.Formatter,
  // 只对 filters 有效，筛选是否允许多选
  filterMultiple?: boolean,
  // 是否允许列排序
  sortable?: boolean,
  // 额外的参数（可以用来存放一些私有参数）
  params?: {},
  // 是否显示
  hide?: boolean,
}

/* API回调函数类型 */
export type API = (params: GridParams) => Promise<ResponseBody>;

/* 排序类型 */
export type SortType = {
  field: string,
  order: string
};

/* 筛选类型 */
export type FilterType = {
  // 字段
  field: string,
  // 值
  value: string,
  // 类型
  type: 'string' | 'number',
  // 是否模糊查询
  fuzzy: boolean,
}

/********************* 分页 ***********************/

/* 分页信息、{ currentPage: 当前页, pageSize: 每页的条数, total: 总条数 } */
export interface PagerInfo {
  currentPage: number,
  pageSize: number,
  totalResult: number,
}

export type PageEvent = {
  $event: Event,
  $pager: any,
  currentPage: number,
  pageSize: number,
  type: string
}

export interface Authority {
  name: string,
  roles: string[]
}
